#include <stdio.h>
#include <omp.h>
// 声明目标设备函数
#pragma omp declare target
void device_compute(int *sum);
#pragma omp end declare target
// 声明主机函数
void host_compute(int *sum);
int main() {
    int sum = 0;
    // 并行区域（支持CPU+GPU异构计算）
    #pragma omp parallel sections reduction(+:sum)
    {
        #pragma omp section
        {
            // GPU任务（需要支持OpenMP卸载）
            #pragma omp target in_reduction(+:sum)
            device_compute(&sum);}
        #pragma omp section
        {
            // CPU任务
            host_compute(&sum);
        } }
    printf("sum = %d\n", sum); // 正确输出 sum = 2
    return 0;
}
// 设备端函数定义
#pragma omp declare target
void device_compute(int *sum) {
    #pragma omp atomic
    *sum += 1;}  // 使用原子操作保证线程安全}
#pragma omp end declare target
// 主机端函数定义
void host_compute(int *sum) {
    #pragma omp atomic
    *sum += 1;}